home *** CD-ROM | disk | FTP | other *** search
/ Mac Power 1997 December / MACPOWER-1997-12.ISO.7z / MACPOWER-1997-12.ISO / AMUG / PROGRAMMING / Raven 1.2.sit / Raven 1.2 / Source / Foundation / OS / ZHelpMessage.cpp < prev    next >
Text File  |  1997-06-18  |  6KB  |  259 lines

  1. /*
  2.  *  File:       ZHelpMessage.cpp
  3.  *  Summary:       A class that encapsulates a HMMessageRecord (ie the stuff in a help balloon).
  4.  *  Written by: Jesse Jones
  5.  *
  6.  *  Copyright ゥ 1996 Jesse Jones. 
  7.  *    For conditions of distribution and use, see copyright notice in ZTypes.h  
  8.  *
  9.  *  Change History (most recent first):    
  10.  *
  11.  *         <->     8/01/96    JDJ        Created
  12.  */
  13.  
  14. #include <ZHelpMessage.h>
  15.  
  16. #include <TextUtils.h>
  17.  
  18. #include <ZDebug.h>
  19. #include <ZNumbers.h>
  20. #include <ZStringUtils.h>
  21.  
  22.  
  23. // ===================================================================================
  24. //    struct THelpMessage
  25. // ===================================================================================
  26.  
  27. //---------------------------------------------------------------
  28. //
  29. // THelpMessage::THelpMessage ()
  30. //
  31. //---------------------------------------------------------------
  32. THelpMessage::THelpMessage()
  33. {
  34.     mMessage.hmmHelpType    = khmmString;
  35.     mMessage.u.hmmString[0] = '¥0';
  36. }
  37.  
  38.  
  39. //---------------------------------------------------------------
  40. //
  41. // THelpMessage::THelpMessage (ResType, ResID)
  42. //
  43. //---------------------------------------------------------------
  44. THelpMessage::THelpMessage(ResType type, ResID id)
  45. {
  46.     ASSERT(id >= 128);
  47.  
  48.     if (type == 'STR ') {
  49.         mMessage.hmmHelpType = khmmSTRRes;
  50.         mMessage.u.hmmSTRRes = id;
  51.             
  52.     } else if (type == 'TEXT') {
  53.         mMessage.hmmHelpType = khmmTERes;
  54.         mMessage.u.hmmTERes  = id;
  55.             
  56.     } else if (type == 'PICT') {
  57.         mMessage.hmmHelpType  = khmmPict;
  58.         mMessage.u.hmmPictRes = id;
  59.         
  60.     } else {
  61.         DEBUGSTR("THelpMessage::THelpMessage got a bad help type!");
  62.         mMessage.hmmHelpType    = khmmString;
  63.         mMessage.u.hmmString[0] = '¥0';
  64.     }
  65. }
  66.  
  67.  
  68. //---------------------------------------------------------------
  69. //
  70. // THelpMessage::THelpMessage (ResType, ResID, short)
  71. //
  72. //---------------------------------------------------------------
  73. THelpMessage::THelpMessage(ResType type, ResID id, short index)
  74. {
  75.     #pragma unused(type)            // non-debug
  76.     
  77.     ASSERT(type == 'STR#');
  78.     ASSERT(id >= 128);
  79.     ASSERT(index >= 1);
  80.     
  81.     mMessage.hmmHelpType             = khmmStringRes;
  82.     mMessage.u.hmmStringRes.hmmResID = id;
  83.     mMessage.u.hmmStringRes.hmmIndex = index;
  84. }
  85.  
  86.  
  87. //---------------------------------------------------------------
  88. //
  89. // THelpMessage::THelpMessage (string)
  90. //
  91. //---------------------------------------------------------------
  92. THelpMessage::THelpMessage(const string& mesg)
  93. {    
  94.     ASSERT(mesg.length() <= 255);
  95.     
  96.     mMessage.hmmHelpType = khmmString;
  97.     
  98.     ulong len = Min(mesg.length(), 255UL);
  99.     BlockMoveData(mesg.c_str(), mMessage.u.hmmString + 1, len);
  100.     mMessage.u.hmmString[0] = (Byte) len;
  101. }
  102.  
  103.  
  104. //---------------------------------------------------------------
  105. //
  106. // THelpMessage::operator==
  107. //
  108. //---------------------------------------------------------------
  109. bool THelpMessage::operator==(const THelpMessage& rhs) const
  110. {
  111.     bool equal = false;
  112.     
  113.     if (mMessage.hmmHelpType == rhs.mMessage.hmmHelpType) {
  114.         if (mMessage.hmmHelpType == khmmSTRRes) {
  115.             equal = mMessage.u.hmmSTRRes == rhs.mMessage.u.hmmSTRRes;
  116.                 
  117.         } else if (mMessage.hmmHelpType == khmmStringRes) {
  118.             if (mMessage.u.hmmStringRes.hmmResID == rhs.mMessage.u.hmmStringRes.hmmResID)
  119.                 equal = mMessage.u.hmmStringRes.hmmIndex == rhs.mMessage.u.hmmStringRes.hmmIndex;
  120.                             
  121.         } else if (mMessage.hmmHelpType == khmmTERes) {
  122.             equal = mMessage.u.hmmTERes == rhs.mMessage.u.hmmTERes;
  123.                 
  124.         } else if (mMessage.hmmHelpType == khmmPict) {
  125.             equal = mMessage.u.hmmPictRes == rhs.mMessage.u.hmmPictRes;
  126.                 
  127.         } else if (mMessage.hmmHelpType == khmmString) {
  128.             equal = EqualString(mMessage.u.hmmString, rhs.mMessage.u.hmmString, true, true);
  129.             
  130.         } else {
  131.             DEBUGSTR("THelpMessage::operator== got a bad help type!");
  132.         }
  133.     }
  134.     
  135.     return equal;
  136. }
  137.  
  138.  
  139. //---------------------------------------------------------------
  140. //
  141. // THelpMessage::IsEmpty
  142. //
  143. //---------------------------------------------------------------
  144. bool THelpMessage::IsEmpty() const
  145. {
  146.     bool empty = false;
  147.     
  148.     if (mMessage.hmmHelpType == khmmString)
  149.         empty = mMessage.u.hmmString[0] == '¥0';
  150.  
  151.     return empty;    
  152. }
  153.  
  154.  
  155. //---------------------------------------------------------------
  156. //
  157. // THelpMessage::GetType
  158. //
  159. //---------------------------------------------------------------
  160. ResType THelpMessage::GetType() const                                    
  161. {
  162.     ResType type;
  163.     
  164.     switch (mMessage.hmmHelpType) {
  165.         case khmmSTRRes:
  166.             type = 'STR ';
  167.             break;
  168.             
  169.         case khmmTERes:
  170.             type = 'TEXT';
  171.             break;
  172.             
  173.         case khmmPict:
  174.             type = 'PICT';
  175.             break;
  176.             
  177.         case khmmStringRes:
  178.             type = 'STR#';
  179.             break;
  180.             
  181.         case khmmString:
  182.             type = 'STRL';
  183.             break;
  184.             
  185.         default:
  186.             DEBUGSTR("THelpMessage::GetType has a bogus type!");
  187.             type = '????';
  188.     }
  189.     
  190.     return type;
  191. }
  192.  
  193.  
  194. //---------------------------------------------------------------
  195. //
  196. // THelpMessage::GetID
  197. //
  198. //---------------------------------------------------------------
  199. ResID THelpMessage::GetID() const
  200. {
  201.     ResID id = 0;
  202.     
  203.     switch (mMessage.hmmHelpType) {
  204.         case khmmSTRRes:
  205.             id = mMessage.u.hmmSTRRes;
  206.             break;
  207.             
  208.         case khmmTERes:
  209.             id = mMessage.u.hmmTERes;
  210.             break;
  211.             
  212.         case khmmPict:
  213.             id = mMessage.u.hmmPictRes;
  214.             break;
  215.             
  216.         case khmmStringRes:
  217.             id = mMessage.u.hmmStringRes.hmmResID;
  218.             break;
  219.             
  220.         case khmmString:
  221.             DEBUGSTR("THelpMessage::GetID was called for a string literal!");
  222.             break;
  223.             
  224.         default:
  225.             DEBUGSTR("THelpMessage::GetID has a bogus type!");
  226.     }
  227.     
  228.     return id;
  229. }
  230.  
  231.  
  232. //---------------------------------------------------------------
  233. //
  234. // THelpMessage::GetIndex
  235. //
  236. //---------------------------------------------------------------
  237. short THelpMessage::GetIndex() const                                
  238. {
  239.     ASSERT(mMessage.hmmHelpType == khmmStringRes); 
  240.     
  241.     return mMessage.u.hmmStringRes.hmmIndex;
  242. }
  243.  
  244.  
  245. //---------------------------------------------------------------
  246. //
  247. // THelpMessage::GetStringLiteral
  248. //
  249. //---------------------------------------------------------------
  250. string THelpMessage::GetStringLiteral() const
  251. {
  252.     ASSERT(mMessage.hmmHelpType == khmmString); 
  253.     
  254.     return PStrToStr(mMessage.u.hmmString);
  255. }
  256.  
  257.  
  258.  
  259.